package com.atguigu.gmall.mq.config;

import org.springframework.amqp.core.*;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

//自定义的基于插件的延迟消息 Java配置类
@Configuration
public class DelayedMqConfig {

    public static final String exchange_delay = "exchange.delay";
    public static final String routing_delay = "routing.delay";
    public static final String queue_delay_1 = "queue.delay.1";


    //延迟交换机
    /**
     * 延迟交换机 双重身份
     * 1 延迟交换机 （自身类型） 安装插件给的
     * 2 此交换机与队列之间的绑定关系属性与（曾经的路由模型、直接交换机）
     */
    @Bean
    public Exchange delayedExchange(){
        Map<String,Object> arguments = new HashMap<>();
        //x-delayed-type：direct  此交换机和路由的关系
        arguments.put("x-delayed-type","direct");
        //创建自定义的交换机
        //参数2 表示交换机本身的类型  x-delayed-message 表示此交换机是延迟交换机
        return new CustomExchange(exchange_delay,"x-delayed-message",
                true,false,arguments);
    }
    //普通的队列
    @Bean
    public Queue generalQueue(){

        return QueueBuilder.durable(queue_delay_1).build();
    }
    //绑定
    @Bean
    public Binding bindingGeneralQueueToDelayedExchange(){
        return BindingBuilder.bind(generalQueue()).to(delayedExchange()).with(routing_delay).noargs();
    }

}
